home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 010 / designer.arc / DESIGNER.BAS < prev    next >
Encoding:
BASIC Source File  |  1986-04-27  |  23.9 KB  |  599 lines

  1. 10000 REM **************************************************************
  2. 10010 REM **                  THE DESIGNER V1.0                       **
  3. 10020 REM **           Copyright 1983, by Jan B. Young                **
  4. 10030 REM **************************************************************
  5. 10040 KEY OFF:ON ERROR GOTO 14930:CAPS=1:PURGE=0
  6. 10050 OPEN "A:DESIGNER.DRV" FOR INPUT AS #1
  7. 10060 INPUT #1,DRIVE$
  8. 10070 CLOSE #1
  9. 10080 KEY(1) ON:ON KEY(1) GOSUB 10440
  10. 10090 KEY(2) ON:ON KEY(2) GOSUB 10450
  11. 10100 KEY(3) ON:ON KEY(3) GOSUB 10460
  12. 10110 KEY(4) ON:ON KEY(4) GOSUB 10470
  13. 10120 KEY(5) ON:ON KEY(5) GOSUB 10480
  14. 10130 KEY(6) ON:ON KEY(6) GOSUB 10490
  15. 10140 KEY(7) ON:ON KEY(7) GOSUB 10500
  16. 10150 KEY(8) ON:ON KEY(8) GOSUB 10510
  17. 10160 KEY(9) ON:ON KEY(9) GOSUB 10520
  18. 10170 KEY(10) ON:ON KEY(10) GOSUB 10530
  19. 10180 REM **************************************************************
  20. 10190 REM **                    Mainline                              **
  21. 10200 REM **************************************************************
  22. 10210 SKIP$ = "INS":NOW$="INS"
  23. 10220 REC=1:GOSUB 15490
  24. 10230 IF SKIP$="INS" THEN GOSUB 10540
  25. 10240 IF SKIP$="NEW" THEN GOSUB 11000
  26. 10250 IF SKIP$="TXT" THEN GOSUB 12170
  27. 10260 IF SKIP$="SCL" THEN GOSUB 12680
  28. 10270 IF SKIP$="SSP" THEN GOSUB 13470
  29. 10280 IF SKIP$="RSP" THEN GOSUB 14330
  30. 10290 IF SKIP$="ANI" THEN GOSUB 13870
  31. 10300 IF SKIP$="RSC" THEN GOSUB 14610
  32. 10310 IF SKIP$="SSC" THEN GOSUB 14740
  33. 10320 IF SKIP$ <> "" GOTO 10230
  34. 10330 SCREEN 0,0,0:WIDTH 80:END
  35. 10340 REC=5:GOSUB 15490
  36. 10350 GOSUB 15220:IF TYPE$<>"C" THEN GOTO 10350
  37. 10360 IF X$ < "A" OR X$ > "D" THEN GOTO 10350
  38. 10370 OPEN "A:DESIGNER.DRV" FOR OUTPUT AS #1
  39. 10380 WRITE #1, X$:CLOSE #1:DRIVE$=X$:GOTO 10080
  40. 10390 REC=19:GOSUB 15490:GOSUB 15220:SCREEN 0,0,0:END ' no color/graph card
  41. 10400 REC=24:GOSUB 15490:GOSUB 15220:SCREEN 0,0,0:END  ' no printer
  42. 10410 REM *************************************************************
  43. 10420 REM **                   Key Settings                          **
  44. 10430 REM *************************************************************
  45. 10440 SKIP$ = "NEW":RETURN
  46. 10450 SKIP$ = "SCL":RETURN
  47. 10460 SKIP$ = "SSP":RETURN
  48. 10470 SKIP$ = "SSC":RETURN
  49. 10480 SKIP$ = "RSP":RETURN
  50. 10490 SKIP$ = "RSC":RETURN
  51. 10500 SKIP$ = "TXT":RETURN
  52. 10510 SKIP$ = "ANI":RETURN
  53. 10520 SKIP$ = "INS":RETURN
  54. 10530 SKIP$ = "":RETURN
  55. 10540 REM *************************************************************
  56. 10550 REM **  F9     INS = Instructions / Command List               **
  57. 10560 REM *************************************************************
  58. 10570 NOW$="INS"
  59. 10580 REC=28:GOSUB 15490
  60. 10590 LOCATE 21,10:PRINT DRIVE$+"."
  61. 10600 GOSUB 15220:IF SKIP$<>"INS" THEN RETURN
  62. 10610 IF ASC(X$) = 8 THEN GOTO 10600
  63. 10620 IF TYPE$ <> "C" THEN GOTO 10600
  64. 10630 LOCATE 8,62:PRINT USING "\         \";"          "+X$:Y$=X$
  65. 10640 GOSUB 15220:IF SKIP$<>"INS" THEN RETURN
  66. 10650 IF TYPE$ <> "C" THEN GOTO 10640
  67. 10660 IF ASC(X$) <> 8 THEN GOTO 10690
  68. 10670 LOCATE 8,62:PRINT USING "\          \";"            "
  69. 10680 GOTO 10600
  70. 10690 LOCATE 8,73:PRINT X$:Y$=Y$+X$
  71. 10700 GOSUB 15220:IF SKIP$<>"INS" THEN RETURN
  72. 10710 IF TYPE$ <> "C" THEN GOTO 10700
  73. 10720 IF ASC(X$) <> 8 THEN GOTO 10750
  74. 10730 LOCATE 8,73:PRINT " "
  75. 10740 GOTO 10640
  76. 10750 LOCATE 8,74:PRINT X$:X$=Y$+X$
  77. 10760 REC=0
  78. 10770 IF X$="INS" THEN GOTO 10580
  79. 10780 IF X$="GEN" THEN REC = 46
  80. 10790 IF X$="NEW" THEN REC = 140
  81. 10800 IF X$="SCL" THEN REC = 189
  82. 10810 IF X$="RSP" THEN REC = 271
  83. 10820 IF X$="SSP" THEN REC = 301
  84. 10830 IF X$="RSC" THEN REC = 328
  85. 10840 IF X$="SSC" THEN REC = 352
  86. 10850 IF X$="ANI" THEN REC = 363
  87. 10860 IF X$="TXT" THEN REC = 389
  88. 10870 IF X$="CRD" THEN REC = 435
  89. 10880 IF X$="DRV" THEN GOTO 10920
  90. 10890 IF REC <> 0 THEN GOTO 10910
  91. 10900 LOCATE 8,62:PRINT "Try Again:   ":GOTO 10600
  92. 10910 GOSUB 15490:RETURN
  93. 10920 OPEN "A:DESIGNER.DRV" FOR OUTPUT AS #1
  94. 10930 IF DRIVE$="A" THEN GOTO 10980
  95. 10940 IF DRIVE$="D" THEN DRIVE$="A"
  96. 10950 IF DRIVE$="C" THEN DRIVE$="D"
  97. 10960 IF DRIVE$="B" THEN DRIVE$="C"
  98. 10970 GOTO 10990
  99. 10980 DRIVE$="B"
  100. 10990 WRITE #1,DRIVE$:CLOSE #1:RETURN
  101. 11000 REM *************************************************************
  102. 11010 REM **   F1      NEW = New Figure or Screen                    **
  103. 11020 REM *************************************************************
  104. 11030 NOW$="NEW":REC=471:GOSUB 15490
  105. 11040 GOSUB 15220:IF SKIP$<>"NEW" THEN RETURN
  106. 11050 IF TYPE$<>"C" THEN 11040
  107. 11060 IF X$="H" THEN GOTO 11090
  108. 11070 IF X$="M" THEN GOTO 11100
  109. 11080 GOTO 11040
  110. 11090 RES1=2:BAK=0:GOTO 11230
  111. 11100 REC = 474:RES1=1
  112. 11110 GOSUB 15490
  113. 11120 GOSUB 15220:IF SKIP$<>"NEW" THEN RETURN
  114. 11130 IF X$="1" THEN GOTO 11160
  115. 11140 IF X$="0" THEN GOTO 11170
  116. 11150 GOTO 11120
  117. 11160 REC=478:PAL=1:GOTO 11180
  118. 11170 REC=489:PAL=0
  119. 11180 GOSUB 15490
  120. 11190 GOSUB 15220:IF SKIP$<>"NEW" THEN RETURN
  121. 11200 IF TYPE$<>"C" THEN 11190
  122. 11210 BAK=ASC(X$)-65
  123. 11220 IF BAK<0 OR BAK >15 THEN GOTO 11190
  124. 11230 RES=RES1:CLS:CLR=1:GRID=0:SCREEN RES:LAST=0
  125. 11240 IF RES=1 THEN COLOR BAK,PAL
  126. 11250 REM ********* intermediate entry point ***********
  127. 11260 HLOC=160*RES:VLOC=100
  128. 11270 PSET(HLOC,VLOC)
  129. 11280 IF LAST=1 THEN PRESET(HLOC,VLOC+1),CLR
  130. 11290 IF LAST=2 THEN PRESET(HLOC-1,VLOC),CLR
  131. 11300 IF LAST=3 THEN PRESET(HLOC,VLOC-1),CLR
  132. 11310 IF LAST=4 THEN PRESET(HLOC+1,VLOC),CLR
  133. 11320 PURGE=1:GOSUB 15220:IF SKIP$<>"NEW" THEN RETURN
  134. 11330 IF TYPE$="G" THEN GOTO 11530
  135. 11340 IF X$ = "G" THEN GOTO 11380
  136. 11350 IF X$>="A" AND X$ <="Z" THEN HOLD$=X$
  137. 11360 IF X$=>"0" AND X$ <="9" THEN GOTO 11580
  138. 11370 GOTO 11320
  139. 11380 IF GRID=1 THEN GOTO 11460
  140. 11390 FOR I = 9 TO 200 STEP 10
  141. 11400 LINE (0,I)-(4*RES,I),1:LINE (315*RES,I)-(320*RES,I),1
  142. 11410 NEXT I
  143. 11420 FOR I = 9 TO 320*RES STEP 10
  144. 11430 LINE (I,0)-(I,4),1:LINE (I,195)-(I,200),1
  145. 11440 NEXT I
  146. 11450 GRID=1:GOTO 11320
  147. 11460 FOR I = 9 TO 200 STEP 10
  148. 11470 LINE (0,I)-(4*RES,I),0:LINE (315*RES,I)-(320*RES,I),0
  149. 11480 NEXT I
  150. 11490 FOR I = 9 TO 320*RES STEP 10
  151. 11500 LINE (I,0)-(I,4),0:LINE (I,195)-(I,200),0
  152. 11510 NEXT I
  153. 11520 GRID=0:GOTO 11320
  154. 11530 IF X$="H" THEN GOTO 12140
  155. 11540 IF X$="M" THEN GOTO 12120
  156. 11550 IF X$="P" THEN GOTO 12100
  157. 11560 IF X$="K" THEN GOTO 12080
  158. 11570 GOTO 11320
  159. 11580 IF HOLD$ <>"P" THEN GOTO 11630
  160. 11590 IF X$<"0" OR  X$>"3" OR (RES=2 AND X$>"1") THEN GOTO 11630
  161. 11600 PRESET (HLOC,VLOC)
  162. 11610 PAINT (HLOC,VLOC),(ASC(X$)-48),CLR
  163. 11620 PRESET (HLOC,VLOC),CLR
  164. 11630 IF HOLD$="F" AND X$="0" THEN CLR=0
  165. 11640 IF HOLD$="F" AND X$="1" THEN CLR=1
  166. 11650 IF HOLD$="F" AND X$="2" THEN CLR=2
  167. 11660 IF HOLD$="F" AND X$="3" THEN CLR=3
  168. 11670 IF HOLD$="F" THEN HOLD$=""
  169. 11680 IF HOLD$<>"D" OR X$ <> "1" THEN GOTO 11710
  170. 11690 VSET=VLOC:HSET=HLOC:HOLD$=""
  171. 11700 GOTO 11320
  172. 11710 IF HOLD$<>"D" OR X$ <> "2" THEN GOTO 11740
  173. 11720 LINE (HSET,VSET)-(HLOC,VLOC),CLR:HOLD$=""
  174. 11730 GOTO 11320
  175. 11740 IF HOLD$<>"C" OR X$<> "1" THEN GOTO 11770
  176. 11750 VSET=VLOC:HSET=HLOC:HOLD$=""
  177. 11760 GOTO 11320
  178. 11770 IF HOLD$<>"C" OR X$<> "2" THEN GOTO 11830
  179. 11780 IF RES=2 THEN RAD=SQR(5.7*(VSET-VLOC)^2+(HSET-HLOC)^2)
  180. 11790 IF RES=1 THEN RAD=SQR(1.45*(VSET-VLOC)^2+(HSET-HLOC)^2)
  181. 11800 CIRCLE (HSET,VSET),RAD,CLR
  182. 11810 HOLD$=""
  183. 11820 GOTO 11320
  184. 11830 IF HOLD$<>"A" OR X$<> "1" THEN GOTO 11860
  185. 11840 VSET=VLOC:HSET=HLOC:HOLD$=""
  186. 11850 GOTO 11320
  187. 11860 IF HOLD$<>"A" OR X$<>"2" THEN GOTO 11890
  188. 11870 VSET2=VLOC:HSET2=HLOC:HOLD$=""
  189. 11880 GOTO 11320
  190. 11890 IF HOLD$<>"A" OR X$<>"3" THEN GOTO 11320
  191. 11900 IF RES=2 THEN GOTO 11990
  192. 11910 RAD=SQR(1.4*(VSET-VSET2)^2+(HSET-HSET2)^2)
  193. 11920 ANG1=ATN(1.25*(VSET-VSET2)/(HSET2-HSET))
  194. 11930 ANG2=ATN(1.25*(VSET-VLOC)/(HLOC-HSET))
  195. 11940 IF HSET>HLOC THEN ANG2=3.14+ANG2
  196. 11950 IF HLOC>HSET AND VLOC>VSET THEN ANG2=6.28+ANG2
  197. 11960 IF HSET>HSET2 THEN ANG1=3.14+ANG1
  198. 11970 IF HSET2>HSET AND VSET2>VSET THEN ANG1=6.28+ANG1
  199. 11980 GOTO 12060
  200. 11990 RAD=SQR(5.7*(VSET-VSET2)^2+(HSET-HSET2)^2)
  201. 12000 ANG1=ATN(2.5*(VSET-VSET2)/(HSET2-HSET))
  202. 12010 ANG2=ATN(2.5*(VSET-VLOC)/(HLOC-HSET))
  203. 12020 IF HSET>HLOC THEN ANG2=3.14+ANG2
  204. 12030 IF HLOC>HSET AND VLOC>VSET THEN ANG2=6.28+ANG2
  205. 12040 IF HSET>HSET2 THEN ANG1=3.14+ANG1
  206. 12050 IF HSET2>HSET AND VSET2>VSET THEN ANG1=6.28+ANG1
  207. 12060 CIRCLE (HSET,VSET),RAD,CLR,ANG1,ANG2
  208. 12070 HOLD$="":GOTO 11320
  209. 12080 IF HLOC > 0 THEN HLOC=HLOC-1
  210. 12090 LAST=4:GOTO 11270
  211. 12100 IF VLOC < 199 THEN VLOC=VLOC+1
  212. 12110 LAST=3:GOTO 11270
  213. 12120 IF HLOC < RES*320-1 THEN HLOC=HLOC+1
  214. 12130 LAST=2:GOTO 11270
  215. 12140 IF VLOC > 0 THEN VLOC=VLOC-1
  216. 12150 LAST=1:GOTO 11270
  217. 12160 RETURN
  218. 12170 REM *************************************************************
  219. 12180 REM **  F7      TXT = Add Text Characters                      **
  220. 12190 REM *************************************************************
  221. 12200 IF RES <> 0 THEN GOTO 12220
  222. 12210 NOW$="TXT":REC=500:GOSUB 15490:GOSUB 15220:RETURN
  223. 12220 NOW$="TXT":CAPS=0:START=1:MSG=0:GOSUB 15920
  224. 12230 PRESET (HLOC,VLOC),CLR
  225. 12240 OPEN "A:TEXTCHAR" AS #1 LEN=12:GOTO 12250
  226. 12250 FIELD #1,12 AS BUFFER$
  227. 12260 DIM HOLDC(2),HOLDB(2*(3-RES))
  228. 12270 PURGE=1:GOSUB 15220:IF SKIP$="NEW" THEN GOTO 12650
  229. 12280 IF SKIP$ <> "TXT" THEN GOTO 12640
  230. 12290 IF TYPE$="C" AND ASC(X$) > 31 AND ASC(X$) < 126 THEN GOTO 12500
  231. 12300 IF TYPE$ = "C" THEN GOTO 12270
  232. 12310 IF X$ <>"H" AND X$ <>"M" AND X$<>"P" AND X$<>"K" THEN GOTO 12270
  233. 12320 IF START=1 THEN GOTO 12270
  234. 12330 PUT (HLOC,VLOC),HOLDB,PSET
  235. 12340 IF X$="H" THEN GOTO 12390
  236. 12350 IF X$="M" THEN GOTO 12410
  237. 12360 IF X$="P" THEN GOTO 12430
  238. 12370 IF X$="K" THEN GOTO 12450
  239. 12380 GOTO 12270
  240. 12390 IF VLOC > 0 THEN VLOC=VLOC-1
  241. 12400 GOTO 12470
  242. 12410 IF HLOC < RES*320-7 THEN HLOC=HLOC+1
  243. 12420 GOTO 12470
  244. 12430 IF VLOC < 192 THEN VLOC=VLOC+1
  245. 12440 GOTO 12470
  246. 12450 IF HLOC > 0 THEN HLOC=HLOC-1
  247. 12460 GOTO 12470
  248. 12470 GET(HLOC,VLOC)-(HLOC+6,VLOC+7),HOLDB
  249. 12480 PUT (HLOC,VLOC),HOLDC,PSET
  250. 12490 GOTO 12270
  251. 12500 IF ASC(X$) > 32 THEN GOTO 12550
  252. 12510 FOR I=HLOC TO HLOC+3*RES:FOR J=VLOC TO VLOC+7
  253. 12520 PSET (I,J),0
  254. 12530 NEXT J,I
  255. 12540 GOTO 12270
  256. 12550 GET #1,ASC(X$)-32+(2-RES)*93
  257. 12560 OUTPUT$=BUFFER$
  258. 12570 FOR J= 0 TO 2
  259. 12580 HOLDC(J)=CVS(MID$(OUTPUT$,4*J+1,4))
  260. 12590 NEXT J
  261. 12600 HLOC=RES*160-3:VLOC=97:START=0
  262. 12610 GET(HLOC,VLOC)-(HLOC+6,VLOC+7),HOLDB
  263. 12620 PUT (HLOC,VLOC),HOLDC,PSET
  264. 12630 GOTO 12270
  265. 12640 ERASE HOLDC,HOLDB:CLOSE #1:CAPS=1:RETURN
  266. 12650 ERASE HOLDC,HOLDB:CLOSE #1:CAPS=1:SKIP$="NEW":NOW$="NEW"
  267. 12660 MSG=0:GOSUB 15920:GOTO 11260
  268. 12670 REC=503:GOSUB 15490:GOSUB 15220:RETURN
  269. 12680 REM *************************************************************
  270. 12690 REM **  F2        SCL = Scale a Drawing     Color 0,14         **
  271. 12700 REM *************************************************************
  272. 12710 IF RES <> 0 THEN GOTO 12730
  273. 12720 NOW$="SCL":REC=510:GOSUB 15490:GOSUB 15220:RETURN
  274. 12730 NOW$="SCL":MSG=0:GOSUB 15920
  275. 12740 SPEED=0:PRESET (HLOC,VLOC),CLR
  276. 12750 GOSUB 15220:IF SKIP$="NEW" THEN GOTO 13460
  277. 12760 IF SKIP$ <> "SCL" THEN RETURN
  278. 12770 IF TYPE$="G" THEN GOTO 12750
  279. 12780 IF X$ > "0" AND X$ <= "9" AND HOLD$ <> " " THEN SPEED = 1-(ASC(X$)-48)/25
  280. 12790 IF X$ = "E" THEN HOLD$ = "E"
  281. 12800 IF X$ = "C" THEN HOLD$ = "C"
  282. 12810 IF SPEED = 0 OR HOLD$ = " " THEN GOTO 12750
  283. 12820 IF HOLD$ = "E" THEN GOTO 13140
  284. 12830 REM ***** contract - left side *****
  285. 12840 FOR I = 160*RES TO 0 STEP -1
  286. 12850 IF SKIP$<>"SCL" THEN RETURN
  287. 12860 PSET(I,0),1:PSET(I,199),1
  288. 12870 K=160*RES-(160*RES-I)/SPEED
  289. 12880 FOR J = 100 TO 1 STEP -1
  290. 12890 L=100-(100-J)/SPEED
  291. 12900 IF K >=0 AND L >=0 THEN PSET (I,J),POINT(K,L) ELSE PSET (I,J),0
  292. 12910 NEXT J
  293. 12920 FOR J = 101 TO 198
  294. 12930 L=100+(J-100)/SPEED
  295. 12940 IF K >=0 AND L <=199 THEN PSET (I,J),POINT(K,L) ELSE PSET (I,J),0
  296. 12950 NEXT J
  297. 12960 PSET(I,0),0:PSET(I,199),0
  298. 12970 NEXT I
  299. 12980 REM *****  contract - right side *****
  300. 12990 FOR I = 160*RES + 1 TO 320*RES-1
  301. 13000 IF SKIP$<>"SCL" THEN RETURN
  302. 13010 PSET(I,0),1:PSET(I,199),1
  303. 13020 K=160*RES+(I-160*RES)/SPEED
  304. 13030 FOR J = 100 TO 1 STEP -1
  305. 13040 L=100-(100-J)/SPEED
  306. 13050 IF K <= 320*RES-1 AND L >= 0 THEN PSET(I,J),POINT(K,L) ELSE PSET(I,J),0
  307. 13060 NEXT J
  308. 13070 FOR J = 101 TO 198
  309. 13080 L=100+(J-100)/SPEED
  310. 13090 IF K <= 320*RES-1 AND L <=199 THEN PSET (I,J),POINT(K,L) ELSE PSET (I,J),0
  311. 13100 NEXT J
  312. 13110 PSET(I,0),0:PSET(I,199),0
  313. 13120 NEXT I
  314. 13130 SPEED = 0:HOLD$ = " ":MSG=0:GOSUB 15920:GOTO 12750
  315. 13140 REM ***** expand - left side *****
  316. 13150 SPEED = 2-SPEED
  317. 13160 FOR I = 0 TO 160*RES
  318. 13170 IF SKIP$<>"SCL" THEN RETURN
  319. 13180 PSET(I,0),1:PSET(I,199),1
  320. 13190 K=160*RES-((160*RES-I)/SPEED)
  321. 13200 FOR J = 1 TO 100
  322. 13210 L=100-((100-J)/SPEED)
  323. 13220 PSET (I,J),POINT(K,L)
  324. 13230 NEXT J
  325. 13240 FOR J = 198 TO 101 STEP -1
  326. 13250 L=100-((100-J)/SPEED)
  327. 13260 PSET (I,J),POINT(K,L)
  328. 13270 NEXT J
  329. 13280 PSET(I,0),0:PSET(I,199),0
  330. 13290 NEXT I
  331. 13300 REM *****  expand - right side *****
  332. 13310 FOR I = 320*RES-1 TO 160*RES + 1 STEP -1
  333. 13320 IF SKIP$<>"SCL" THEN RETURN
  334. 13330 PSET(I,0),1:PSET(I,199),1
  335. 13340 K = (I-160*RES)/SPEED + 160*RES
  336. 13350 FOR J = 1 TO 100
  337. 13360 L=100-(100-J)/SPEED
  338. 13370 PSET(I,J),POINT(K,L)
  339. 13380 NEXT J
  340. 13390 FOR J = 198 TO 101 STEP -1
  341. 13400 L=(J-100)/SPEED + 100
  342. 13410 PSET (I,J),POINT(K,L)
  343. 13420 NEXT J
  344. 13430 PSET(I,0),0:PSET(I,199),0
  345. 13440 NEXT I
  346. 13450 SPEED = 0:HOLD$ = " ":MSG=0:GOSUB 15920:GOTO 12750
  347. 13460 SKIP$="NEW":NOW$="NEW":MSG=0:GOSUB 15920:GOTO 11260
  348. 13470 REM *************************************************************
  349. 13480 REM **  F3       SSP = Store a Sprite                          **
  350. 13490 REM *************************************************************
  351. 13500 IF RES <> 0 THEN GOTO 13520
  352. 13510 NOW$="SSP":REC=513:GOSUB 15490:GOSUB 15220:RETURN
  353. 13520 RES1=RES:NOW$="SSP"
  354. 13530 L=1:R=320*RES1:T=1:B=200:SPEED=1
  355. 13540 LINE (L,T)-(R,B),1,B
  356. 13550 PURGE=1:GOSUB 15220:IF SKIP$<>"SSP" THEN RETURN
  357. 13560 IF TYPE$="G" THEN GOTO 13780
  358. 13570 IF X$<"1" OR X$>"9" THEN GOTO 13600
  359. 13580 SPEED = ASC(X$)-48
  360. 13590 GOTO 13550
  361. 13600 IF X$<>"G" THEN GOTO 13550
  362. 13610 R=R-1:L=L+1:T=T+1:B=B-1
  363. 13620 I=4+INT(((R-L+1)*(3-RES1)+7)/8)*(B-T+1)
  364. 13630 I=INT((3+I)/4)+1:J=FRE(" ")
  365. 13640 IF J>((I*4)+500) THEN GOTO 13660
  366. 13650 MSG=1001:GOSUB 15920:GOTO 13550
  367. 13660 DIM HOLD(I)
  368. 13670 GET (L,T)-(R,B),HOLD
  369. 13680 REC=516:VLOC=6:GOSUB 15340:IF SKIP$<>"SSP" THEN GOTO 13760
  370. 13690 OPEN Y$+".SPR" FOR OUTPUT AS #1
  371. 13700 WRITE #1,RES1,PAL,I,R-L+1,B-T+1
  372. 13710 FOR J= 0 TO I
  373. 13720 K=VARPTR(HOLD(J))
  374. 13730 WRITE #1,PEEK(K),PEEK(K+1),PEEK(K+2),PEEK(K+3)
  375. 13740 NEXT J
  376. 13750 REC = 520:GOSUB 15490:GOSUB 15220:SKIP$="INS"
  377. 13760 CLOSE #1:ERASE HOLD
  378. 13770 RETURN
  379. 13780 LINE (L,T)-(R,B),0,B
  380. 13790 IF X$="H" THEN B=B-SPEED
  381. 13800 IF X$="M" THEN L=L+SPEED
  382. 13810 IF X$="P" THEN T=T+SPEED
  383. 13820 IF X$="K" THEN R=R-SPEED
  384. 13830 IF B<T+2 THEN B=T+2
  385. 13840 IF L>R-2 THEN L=R-2
  386. 13850 GOTO 13540
  387. 13860 RETURN
  388. 13870 REM *************************************************************
  389. 13880 REM **  F8          ANI = Test Animation                       **
  390. 13890 REM *************************************************************
  391. 13900 NOW$="ANI":REC=521:VLOC=4:GOSUB 15340:IF SKIP$<>"ANI" THEN RETURN
  392. 13910 REC=524:Z$=Y$:VLOC=6:GOSUB 15340:IF SKIP$<>"ANI" THEN RETURN
  393. 13920 OPEN Z$+".RES" FOR INPUT AS #1:GOTO 13930
  394. 13930 INPUT #1,RES1,BAK,PAL1
  395. 13940 CLOSE #1
  396. 13950 OPEN Y$+".SPR" FOR INPUT AS #1:GOTO 13960
  397. 13960 INPUT #1,RES,PAL,I,WID,HGHT
  398. 13970 DIM HOLDC(I),HOLDB(I):GOTO 13980
  399. 13980 FOR J=0 TO I
  400. 13990 K=VARPTR(HOLDC(J)):INPUT #1,H(0),H(1),H(2),H(3)
  401. 14000 FOR L=0 TO 3:POKE K+L,H(L):NEXT L
  402. 14010 NEXT J
  403. 14020 CLOSE #1
  404. 14030 HLOC=(320*RES-WID)/2:VLOC=(200-HGHT)/2
  405. 14040 SCREEN RES
  406. 14050 IF RES = 1 THEN COLOR BAK,PAL
  407. 14060 DEF SEG=&HB800
  408. 14070 BLOAD Z$,0
  409. 14080 DEF SEG
  410. 14090 GET (HLOC,VLOC)-(HLOC+WID-1,VLOC+HGHT-1),HOLDB
  411. 14100 Y$="P":PUT (HLOC,VLOC),HOLDC,PSET
  412. 14110 PURGE=1:GOSUB 15220: IF SKIP$ <> "ANI" THEN GOTO 14290
  413. 14120 IF TYPE$ <> "G" THEN GOTO 14240
  414. 14130 PUT (HLOC,VLOC),HOLDB,PSET
  415. 14140 IF X$ = "H" AND VLOC > 0 THEN VLOC=VLOC-1
  416. 14150 IF X$ = "M" AND HLOC < RES*319-WID+1 THEN HLOC=HLOC+1
  417. 14160 IF X$ = "P" AND VLOC < 200-HGHT THEN VLOC=VLOC+1
  418. 14170 IF X$ = "K" AND HLOC > 0 THEN HLOC=HLOC-1
  419. 14180 GET (HLOC,VLOC)-(HLOC+WID-1,VLOC+HGHT-1),HOLDB
  420. 14190 IF Y$="P" THEN PUT (HLOC,VLOC),HOLDC,PSET
  421. 14200 IF Y$="A" THEN PUT (HLOC,VLOC),HOLDC,AND
  422. 14210 IF Y$="O" THEN PUT (HLOC,VLOC),HOLDC,OR
  423. 14220 IF Y$="X" THEN PUT (HLOC,VLOC),HOLDC,XOR
  424. 14230 GOTO 14110
  425. 14240 IF X$="X" THEN Y$="X"
  426. 14250 IF X$="A" THEN Y$="A"
  427. 14260 IF X$="O" THEN Y$="O"
  428. 14270 IF X$="P" THEN Y$="P"
  429. 14280 GOTO 14110
  430. 14290 CLOSE #1:ERASE HOLDB:ERASE HOLDC:RETURN
  431. 14300 REC=525:GOSUB 15490:GOSUB 15220:RETURN
  432. 14310 REC=528:GOSUB 15490:GOSUB 15220:RETURN
  433. 14320 REC=531:GOSUB 15490:GOSUB 15220:RETURN
  434. 14330 REM *************************************************************
  435. 14340 REM **  F5        RSP = Retrieve a Sprite                      **
  436. 14350 REM *************************************************************
  437. 14360 NOW$="RSP":REC=534:VLOC=4:GOSUB 15340:IF SKIP$<>"RSP" THEN RETURN
  438. 14370 OPEN Y$+".SPR" FOR INPUT AS #1
  439. 14380 INPUT #1,RES1,PAL,I,WID,HGHT
  440. 14390 DIM HOLDC(I)
  441. 14400 IF RES1 <>1 THEN GOTO 14460
  442. 14410 REC=537:GOSUB 15490
  443. 14420 GOSUB 15220:IF SKIP$<>"RSP" THEN GOTO 14580
  444. 14430 IF TYPE$<>"C" THEN 14420
  445. 14440 BAK=ASC(X$)-65
  446. 14450 IF BAK<0 OR BAK >15 THEN GOTO 14420
  447. 14460 SCREEN RES1:RES=RES1
  448. 14470 CLS
  449. 14480 IF RES=1 THEN COLOR BAK,PAL
  450. 14490 FOR J= 0 TO I
  451. 14500 K=VARPTR(HOLDC(J)):INPUT #1,H(0),H(1),H(2),H(3)
  452. 14510 FOR L=0 TO 3:POKE K+L,H(L):NEXT L
  453. 14520 NEXT J
  454. 14530 HLOC=(320*RES-WID)/2:VLOC=(200-HGHT)/2
  455. 14540 PUT (HLOC,VLOC),HOLDC:ERASE HOLDC
  456. 14550 CLOSE #1
  457. 14560 SKIP$="NEW":NOW$="NEW"
  458. 14570 GOTO 11260
  459. 14580 CLOSE #1:ERASE HOLD:RETURN
  460. 14590 REC=572:GOSUB 15490:GOSUB 15220:RETURN
  461. 14600 REC=548:GOSUB 15490:GOSUB 15220:RETURN
  462. 14610 REM *************************************************************
  463. 14620 REM **  F6       RSC = Retrieve a Screen                       **
  464. 14630 REM *************************************************************
  465. 14640 NOW$="RSC":REC=551:VLOC=4:GOSUB 15340:IF SKIP$<>"RSC" THEN RETURN
  466. 14650 OPEN Y$+".RES" FOR INPUT AS #1:INPUT #1,RES,BAK,PAL:CLOSE #1
  467. 14660 SCREEN RES
  468. 14670 IF RES=1 THEN COLOR BAK,PAL
  469. 14680 DEF SEG=&HB800
  470. 14690 BLOAD Y$,0
  471. 14700 DEF SEG
  472. 14710 SKIP$="NEW":NOW$="NEW"
  473. 14720 GOTO 11260
  474. 14730 REC=554:GOSUB 15490:GOSUB 15220:RETURN
  475. 14740 REM *************************************************************
  476. 14750 REM **  F4          SSC = Store a Screen       Color 0,3       **
  477. 14760 REM *************************************************************
  478. 14770 IF RES <> 0 THEN GOTO 14790
  479. 14780 NOW$="SSC":REC=557:GOSUB 15490:GOSUB 15220:RETURN
  480. 14790 RES1=RES:NOW$="SSC":PRESET (HLOC,VLOC),CLR
  481. 14800 DEF SEG= &HB800
  482. 14810 BSAVE DRIVE$+":SCREEN",0,&H4000:DEF SEG
  483. 14820 REC=560:VLOC=19:GOSUB 15340:IF SKIP$<>"SSC" THEN RETURN
  484. 14830 IF LEN(Y$) > 2 THEN NAME DRIVE$+":SCREEN.BAS" AS Y$+".BAS":GOTO 14840
  485. 14840 IF LEN(Y$) = 2 THEN Y$ = DRIVE$+":SCREEN"
  486. 14850 OPEN Y$+".RES" FOR OUTPUT AS #1
  487. 14860 WRITE #1,RES1,BAK,PAL
  488. 14870 CLOSE #1:CLS:REC=569
  489. 14880 NOW$="INS":SKIP$="INS":GOSUB 15490
  490. 14890 RETURN
  491. 14900 REC=571:GOSUB 15490:LOCATE 19,37:PRINT "        ":GOTO 14820
  492. 14910 REC=576:GOSUB 15490:LOCATE 19,37:PRINT "        ":RETURN
  493. 14920 REC=581:GOSUB 15490:LOCATE 19,37:PRINT "        ":RETURN
  494. 14930 REM *************************************************************
  495. 14940 REM **              Error Handling                             **
  496. 14950 REM *************************************************************
  497. 14960 MSG=ERR:GOSUB 15920
  498. 14970 IF ERR = 7 AND ERL = 13970 THEN RESUME 14320
  499. 14980 IF ERR = 7 AND ERL = 14390 THEN RESUME 14600
  500. 14990 IF (ERR = 24 OR ERR = 25) AND ERL = 15790 THEN RESUME 15850
  501. 15000 IF ERR = 61 AND ERL = 14810 THEN RESUME 14910
  502. 15010 IF ERR = 61 AND ERL = 14870 THEN RESUME 14920
  503. 15020 IF ERR = 68 AND ERL = 15790 THEN RESUME 10400
  504. 15030 IF (ERR = 53 OR ERR = 52) AND ERL = 10050 THEN RESUME 10340
  505. 15040 IF (ERR = 53 OR ERR = 52) AND ERL = 12240 THEN RESUME 12670
  506. 15050 IF (ERR = 53 OR ERR = 52) AND ERL = 13920 THEN RESUME 14300
  507. 15060 IF (ERR = 53 OR ERR = 52) AND ERL = 13950 THEN RESUME 14310
  508. 15070 IF (ERR = 53 OR ERR = 52) AND ERL = 14370 THEN RESUME 14590
  509. 15080 IF (ERR = 53 OR ERR = 52) AND ERL = 14650 THEN RESUME 14730
  510. 15090 IF ERR = 58 AND ERL = 14830 THEN RESUME 14900
  511. 15100 IF ERR = 71 AND ERL = 15530 THEN RESUME 15860
  512. 15110 IF ERR = 72 AND ERL = 15530 THEN RESUME 15910
  513. 15120 CLS
  514. 15130 PRINT "Error number ",ERR," at line number ",ERL
  515. 15140 PRINT
  516. 15150 PRINT "Please notify: Jan Young"
  517. 15160 PRINT "               767 N. Holden St."
  518. 15170 PRINT "               Port Washington, Wi.  53074"
  519. 15180 PRINT
  520. 15190 PRINT "Please include the error number and line number above and"
  521. 15200 PRINT "as much information about what you were doing as possible."
  522. 15210 END
  523. 15220 REM *************************************************************
  524. 15230 REM **               Read From Keyboard                        **
  525. 15240 REM *************************************************************
  526. 15250 IF PURGE=0 THEN 15270
  527. 15260 DEF SEG=&H40:POKE &H1A,PEEK(&H1C):DEF SEG
  528. 15270 X$=INKEY$:IF SKIP$<>NOW$ THEN PURGE=0:RETURN
  529. 15280 IF X$="" THEN 15270
  530. 15290 IF LEN(X$)<>2 THEN 15320
  531. 15300 X$=MID$(X$,2,1)
  532. 15310 TYPE$="G":PURGE=0:RETURN
  533. 15320 IF ASC(X$)>96 AND CAPS=1 THEN X$=CHR$(ASC(X$)-32)
  534. 15330 TYPE$="C":PURGE=0:RETURN
  535. 15340 REM *************************************************************
  536. 15350 REM **              Read 8 Characters From Keyboard            **
  537. 15360 REM *************************************************************
  538. 15370 Y$=DRIVE$+":":GOSUB 15490
  539. 15380 FOR J=1 TO 8
  540. 15390 GOSUB 15220:IF SKIP$<>NOW$ THEN RETURN
  541. 15400 IF TYPE$<>"C" THEN 15390
  542. 15410 IF ASC(X$) <> 8 THEN GOTO 15440
  543. 15420 IF J=1 THEN GOTO 15390
  544. 15430 J=J-1:X$=" ":LOCATE VLOC,62+J:PRINT X$:Y$=MID$(Y$,1,J+1):GOTO 15390
  545. 15440 IF ASC(X$) = 13 THEN GOTO 15480
  546. 15450 IF ASC(X$) = 46 THEN GOTO 15390
  547. 15460 LOCATE VLOC,62+J:PRINT X$:Y$=Y$+X$
  548. 15470 NEXT J
  549. 15480 RETURN
  550. 15490 REM *************************************************************
  551. 15500 REM **         Print Verbiage Screens                          **
  552. 15510 REM *************************************************************
  553. 15520 WIDTH 80:SCREEN 0,1:RES=0
  554. 15530 OPEN "A:VERBIAGE" AS #2 LEN=85
  555. 15540 FIELD #2,85 AS BUFFER$
  556. 15550 GET 2,REC:OUTREC$ = BUFFER$
  557. 15560 IF SKIP$<>NOW$ THEN GOTO 15770
  558. 15570 IF MID$(OUTREC$,1,3)<>"c01" THEN GOTO 15600
  559. 15580 COLOR (VAL(MID$(OUTREC$,4,2))),(VAL(MID$(OUTREC$,6,2))),(VAL(MID$(OUTREC$,8,2)))
  560. 15590 CLS:REC=REC+1:GOTO 15550
  561. 15600 IF MID$(OUTREC$,1,3)="p01" THEN GOTO 15780
  562. 15610 LOCATE (VAL(MID$(OUTREC$,4,2))),(VAL(MID$(OUTREC$,6,2))),0
  563. 15620 IF VAL(MID$(OUTREC$,6,2))>8 THEN PRINT MID$(OUTREC$,8,78-(VAL(MID$(OUTREC$,6,2))))
  564. 15630 IF VAL(MID$(OUTREC$,6,2))<9 THEN PRINT MID$(OUTREC$,8,70)
  565. 15640 IF MID$(OUTREC$,82,1) <> " " AND MID$(OUTREC$,82,1) <> "I" THEN GOTO 15680
  566. 15650 REC = REC +1
  567. 15660 IF VAL(MID$(OUTREC$,78,4)) <> 0 THEN REC=VAL(MID$(OUTREC$,78,4))
  568. 15670 GOTO 15550
  569. 15680 IF MID$(OUTREC$,82,1) <> "P" THEN GOTO 15740
  570. 15690 LOCATE 23,28,0:PRINT "Press Any Key to Continue"
  571. 15700 GOSUB 15220:IF SKIP$ <> NOW$ THEN GOTO 15770
  572. 15710 CLS:REC=REC+1
  573. 15720 IF VAL(MID$(OUTREC$,78,4)) <> 0 THEN REC=VAL(MID$(OUTREC$,78,4))
  574. 15730 GOTO 15550
  575. 15740 IF MID$(OUTREC$,82,1) <> "E" THEN GOTO 15770
  576. 15750 LOCATE 23,28,0:PRINT "Press Any Key to Continue"
  577. 15760 GOSUB 15220
  578. 15770 CLOSE #2:RETURN
  579. 15780 IF MID$(OUTREC$,4,1) = "1" THEN LPRINT
  580. 15790 LPRINT USING "&     &";MID$(OUTREC$,8,35);MID$(OUTREC$,43,35)
  581. 15800 IF MID$(OUTREC$,82,1) <> " " AND MID$(OUTREC$,82,1) <> "I" THEN GOTO 15840
  582. 15810 REC = REC +1
  583. 15820 IF VAL(MID$(OUTREC$,78,4)) <> 0 THEN REC=VAL(MID$(OUTREC$,78,4))
  584. 15830 GOTO 15550
  585. 15840 CLOSE #2:RETURN
  586. 15850 REC=615:GOSUB 15490:GOSUB 15220:GOTO 15790        ' printer not ready
  587. 15860 CLS:PRINT "Your disk drive is not ready.  Please insert The Designer's"
  588. 15870 PRINT "disk in Drive A and close the door."
  589. 15880 PRINT
  590. 15890 PRINT "Press any key to Continue"
  591. 15900 GOSUB 15220:GOTO 15530
  592. 15910 REC=623:GOSUB 15490:GOSUB 15220:GOTO 15530        ' disk i/o error
  593. 15920 REM *************************************************************
  594. 15930 REM **                 Sound Effects                           **
  595. 15940 REM *************************************************************
  596. 15950 IF MSG = 0 THEN PLAY "t255mso3c8c8c8"
  597. 15960 IF MSG > 0 THEN PLAY "t255o1c8e-8c8e-8"
  598. 15970 RETURN
  599.